package com.leeon.thread;

import static net.mindview.util.Print.print;

class Sleeper extends Thread {

	private int duration;
	
	public Sleeper(String name,int sleepTime) {
		super(name);
		this.duration = sleepTime;
		start();
	}
	
	@Override
	public void run() {
		try {
			sleep(duration);
		} catch (Exception e) {
			print(getName() + " was interrrupter." + "isInterrupted(): " + isInterrupted());
			return;
		}
		print(getName() + " has awakened");
	}
	
}

class Joiner extends Thread{
	private Sleeper sleeper;
	public Joiner(String name,Sleeper sleeper) {
		super(name);
		this.sleeper = sleeper;
		start();
	}
	
	@Override
	public void run() {
		try {
			sleeper.join();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		print(getName() + " join completed");
	}
	
}

public class Joining{
	public static void main(String[] args) {
		Sleeper sleeper = new Sleeper("Sleepy", 1500);
		Sleeper grumpy = new Sleeper("Doc", 1500);
		Joiner dopey = new Joiner("Dopey", sleeper);
		Joiner doc = new Joiner("Doc", grumpy);
		grumpy.interrupt();
	}
}
